//
// Created by Administrator on 2020/7/8.
//数据的共享及保护
//共享数据的保护
//常类型:常对象|常成员|常引用|常数组|常指针
//常对象
//常成员：常成员函数|常数据成员
//-------------常成员函数--------------//

#include <iostream>
using namespace std;

class R
{
	public:
		R(int r1,int r2):r1(r1),r2(r2){}
		void print();
		void print()const;//常成员函数
	private:
		int r1,r2;
};

void R::print()
{
	cout<<r1<<":"<<r2<<endl;
}

void R::print()const//常成员函数
{
	cout<<r1<<";"<<r2<<endl;
}

int main()
{
	R a(5,4);
	a.print();//调用void print()

	const R b(20,52);//b是常对象,不能被更新
	b.print();//调用void print() const 常成员函数
	return 0;
}

//-------------常数据成员--------------//
/*
#include <iostream>
using namespace std;
class A
{
public:
    A(int i);
    void print();
private:
    const int a;
    static const int b;//静态常数据成员
};

const int A::b=10;
A::A(int i):a(i){}
void A::print()
{
    cout<<a<<":"<<b<<endl;
}
int main()
{
    A a1(100),a2(0);
    a1.print();//100:10
    a2.print();//0:10
    return 0;
}
*/
//-------------常引用--------------//
/*
#include <iostream>
#include <cmath>
using namespace std;
class Point//Point类定义
{
public://外部接口
    Point(int x=0,int y=0):x(x),y(y){}
    int getX(){return x;}
    int getY(){return y;}
    friend float dist(const Point &p1,const Point &p2);//常引用
private://私有数据成员
    int x,y;
};

float dist(const Point &p1,const Point &p2)//常引用(只读不能写值)
{
    double x=p1.x-p2.x;
    double y=p1.y-p2.y;
    return static_cast<float>(sqrt(x*x+y*y));
}
//主函数
int main()
{
    const Point myp1(1,1),myp2(4,5);
    cout<<"The distance is:";
    cout<<dist(myp1,myp2)<<endl;
    return 0;
}
*/
